# Vioscope

Vioscope is a YT frontend written for minimalists.

Uses PHP on the backend and renders bare bones HTML5 pages with a touch of CSS that can run without JS enabled. Supports proxy over TOR (currently backend functions only). No YT API.


# Features

_**NOTE:** The project is currently in alpha stage. Features might not work as expected._

- [x] Server side proxy supported (HTTP, SOCKS4, SOCKS5/TOR, SOCKS4a)
- [x] Customizable theme
- [x] Versatile config options
- [x] Basic featureset (only needs PHP and no DB, just place somewhere and enjoy!)
- [x] No JS required on client side, just plain HTML5+CSS

Planned to be added:

- [ ] Playlist feature
- [ ] Configurable default/changeable video quality
- [ ] Comments (possibly with alternative comment system as well)
- [ ] Pagination support on channel page
- [ ] Localization/I18n support
- [ ] Closed Captions


# Requirements

- [PHP](https://www.php.net/) 7.2 or later
- (optional) [Tor](https://www.torproject.org/) - for anonymous proxy support. (Currently only backend requests supported)


# Installation

Place the entire directory somewhere in your server. Make sure you include the hidden files so that .htaccess and other important hidden files are copied as well.

For NGINX, make sure to retrict access to hidden files (filenames starting with dot). For servers other than Apache, [disable](https://www.netsparker.com/blog/web-security/disable-directory-listing-web-servers/) directory index for security. For Apache, there is already .htaccess files there for you, so no further actions needed.

Then install the dependencies:

```bash
composer install
composer dumpautoload -o
```

Now copy `inc/sample-config.inc.php` to `inc/config.inc.php` and edit as you wish.

Start a webbrowser and point to the directory you just installed to. e.g. `http://localhost/vioscope/`


# Config

`inc/sample-config.inc.php` file has comments to guide you through the configuration. The default ones are just as fine.

- `theme`: Set the theme to use on frontend. Themes are located in `themes` directory. Default is `default`.
- `base_url`: You should not edit this in a normal setup. This is here to override base_url if you absolutely need to.
- `abs_path`: You should leave this one alone too.
- `app_name`: This is basically the website title. Set it to anything else if you want to. e.g. 'GalaxyTube', 'VideoGallore', "John's Videos".
- `footer_text_1`: Shows the text on footer (on the left on default theme).
- `footer_text_2`: Shows the text on footer (on the right on default theme).
- `default_quality`*: The default video quality to be shown. Can be set to either of these values: `auto|480p|720p|1080p|4k`.
- `allow_changing_quality`*: Allow the user to change the video quality.
- `pagination_amount`*: Items showing on one page at max in a paginated scenario.
- `proxy_enabled`: Enable or disable proxy settings. Think of this as a flip switch for proxy. If you have it set to false, no proxy settings (described below) will be used.
- `proxy_for_frontend_assets_enabled`*: Enables proxy for frontend linked content on user end (such as thumbnails etc.)
- `proxy_type`: Type of proxy to use. Supported proxy types: 'http' (default), 'socks4', 'socks5', 'socks4a'
- `proxy_ip`: The IP of the proxy to use.
- `proxy_port`: The port of the proxy to use.
- `proxy_username`: The username to be used with the proxy. Not all proxies may need this.
- `proxy_password`: The password to be used with the proxy. Not all proxies may need this.

\* Feature is not implemented yet.

## Using TOR as proxy

To set tor as a proxy, install `tor` then enable and start its service. Set the config to something like this:
```php
	'proxy_enabled' => true,
	//'proxy_for_frontend_assets_enabled' => true, // Doesn't work yet
	'proxy_type' => 'socks5',
	'proxy_ip' => '127.0.0.1',
	'proxy_port' => '9050',
```

Tor's default port is `9050`. Adjust to your setup accordingly.


# Privacy

For privacy:

- Try to run it with Javascript disabled on your browser.
- Keep a TOR service running on the computer that has the server setup and config to use that proxy (just set `proxy_enabled` to `true` and keep other settings from sample config file). Do the same on the computer you are browsing it from. Alternatively, you can use a trustworthy proxy or a VPN.
- Configure your browser to not leak your real IP through WebRTC.
- Try to use a Private Window or Incognito Window on your browser whenever possible.


# Tests

To run tests:
```
path/to/this/repo/tests/.run-tests.sh
```


# Known Issues

- Pagination on channel page does not work


# Development

If you introduce a new class, don't forget to run `composer dump-autoload -o`


# Special Thanks

This project is highly inspired by the [Invidious](https://github.com/iv-org/invidious) project.


# License

GNU Affero General Public License v3.0
